<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="Parsley, the ultimate frontend javascript form validation library">
    <meta name="author" content="Guillaume Potier">

    <title>Parsley - The ultimate documentation</title>

    <!-- Bootstrap core CSS -->
    <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="assets/docs.css" rel="stylesheet">

    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>-->
      <!--<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>-->
      <!--<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>-->
    <!--<![endif]-->
    <link href="./assets/github.min.css" rel="stylesheet">
    <link href="../src/parsley.css" rel="stylesheet">

    <style>
      #mailing-list {
        margin-top: 25px;
        width: 200px;
        text-align: justify;
      }
      #mailing-list input {
        margin: 5px 0 !important;
        width: 190px !important;
      }
      #mailing-list label {
        padding: 0px !important;
      }
    </style>
  </head>

  <body>
    <div class="container">
      <div class="masthead">
        <div class="header">
          <h3 class="text-muted"><a href="../">Parsley</a></h3>

          <!--<span class="social-buttons inline-block">
            <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://parsleyjs.org" data-text="Parsley, the ultimate javascript form validation library. #parsleyjs" data-via="guillaumepotier" data-related="guillaumepotier" data-hashtags="parsleyjs">Tweet</a>
            <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>

            <iframe src="http://ghbtns.com/github-btn.html?user=guillaumepotier&repo=Parsley.js&type=watch&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="110" height="20"></iframe>

            <iframe src="http://ghbtns.com/github-btn.html?user=guillaumepotier&repo=Parsley.js&type=fork&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="110" height="20"></iframe>
          </span>-->

        </div>

          <ul class="nav nav-justified">
              <li><a href="../index.html">首页</a></li>
              <li><a href="./examples.html">示例</a></li>
              <li class="active"><a href="./index.html">文档</a></li>
              <li><a href="./download.html">下载</a></li>
              <li><a href="./help.html">帮助</a></li>
              <li><a href="./annotated-source/main.html">源码</a></li>
              <li><a href="./tests.html">测试</a></li>
              <li><a href="./about.html">关于</a></li>
          </ul>
      </div>

      <div class="col-md-9" role="main">
        <div class="docs-section">
          <!-- ****************** OVERVIEW ****************** -->
          <h1 id="overview" class="page-header">概述</h1>
          <h3 id="frontend-form-validation">前端表单验证</h3>
          <p>
              Parsley是一个JavaScript表单验证库。在提交给您的服务器之前，它可以给用户提供反馈。它可以节省您的带宽，服务器负载，并为您的用户节省时间。
          </p>
          <p>
              JavaScript表单验证不是必须的，如果使用它，它也<strong>不能替代后台服务器验证。</strong>
          </p>
          <p>
            这就是为什么Parsley在这里：允许你自定义你的表单验证器，在后端实现它，和简单的端口实现，最大的尊重用户体验。
          </p>

          <div class="bs-callout bs-callout-info">
            <h4>Parsley 1.x versions</h4>
            <p>
              Parsley当前的稳定支持的版本是2.x. 如果你想用 1.x 版本, <a href="http://parsleyjs.github.io/Parsley-1.x" target="_blank">这里是相关文档</a>. 但是不要忘了<a href="https://github.com/guillaumepotier/Parsley.js/blob/master/UPGRADE-2.0.md" target="_blank">更新</a>!
            </p>
          </div>

          <h3 id="data-attrs">data属性</h3>
          <p>
            Parsley 使用特殊的 DOM API ，在DOM上允许您配置任何东西, 无需编写一行JavaScript配置或自定义功能. Parsley 默认的 DOM API 是 <code>data-parsley-</code>. 那意味着 如果在配置中你看见 <code>foo</code> 属性, 它可以通过在DOM上用 <code>data-parsley-foo="value"</code>来设置/修改.
          </p>

          <h3 id="configuration">配置</h3>
          <p>
              沿着此文档，通过各种可用配置选项的<a href="examples.html">例子</a>，你将会看到各种配置选项。
              你也可以在<a href="annotated-source/defaults.html" target="_blank">这里</a>查看所有的默认配置选项。
          </p>


          <!-- ****************** INSTALL ****************** -->
          <h1 id="installation" class="page-header">安装</h1>
          <h3 id="installation-basic">基本安装</h3>
          <p>
            Parsley 依赖 <strong><a href="http://jquery.com/" target="_blank">jQuery</a> (>= 1.8)</strong>,并且要先引入JQuery.
          </p>
          <p>
              如果你想需要支持IE8，你需要引入<strong><a href="https://github.com/es-shims/es5-shim" target="_blank">es5-shim</a></strong>。
          </p>
          <p>
            然后, 你可以使用<code>parsley.js</code> unminified file未压缩文件或 <code>parsley.min.js</code> 压缩版. 这些文件和<a href="#extras">拓展</a>可在<a href="download.html">这里</a>下载.
          </p>
          <p>
            最后, 添加 <code>data-parsley-validate</code> 到每一个要验证的 <code>&lt;form></code> 元素上。
          </p>
          <p>看起来像这样:
<pre><code>&lt;script src="jquery.js">&lt;/script>
&lt;script src="parsley.min.js">&lt;/script>

&lt;form data-parsley-validate>
...
&lt;/form>
</code></pre>
          </p>

          <div class="bs-callout bs-callout-info">
            <h4>Parsley CSS</h4>
            <p>当验证的时候，Parsley在 DOM 中添加了许多 classes(类) 和 elements(元素). 强烈建议您在您的样式文件中，自己定义他们。但是如果你想用Parsley来美化你的项目，这里也有一些"标准的"、被应用到文档和例子上 <a href="../src/parsley.css" target="_blank">Parsley css 文件</a>。</p>
          </div>

          <h3 id="installation-javascript">js安装</h3>
          <p>Like for <a href="#installation-basic">基本安装</a>, 首先要引入 <strong>jQuery</strong> 和 Parsley. 然后, 简单的使用 <code>$('#form').parsley(options);</code> 或 <code>new Parsley('#form', options);</code> (这里<code>options</code>是一个可选的配置对象)来手动的把Parsely绑定到你的表单.</p>

          <p>就像这样:
<pre><code>&lt;script src="jquery.js">&lt;/script>
&lt;script src="parsley.min.js">&lt;/script>

&lt;form id="form">
...
&lt;/form>

&lt;script type="text/javascript">
  $('#form').parsley();
&lt;/script>
</code></pre>

          <div class="bs-callout bs-callout-danger">
            <h4>不要添加 <code>data-parsley-validate</code> 到你的form上</h4>
            <p>
                请注意，当文件加载时，Parsley监控所有出现在DOM上的<code>data-parsley-validate</code>并且自动绑定他们.<br>
              一旦一个form或者field实例被Parsley绑定，执行<code>$('#form').parsley(options);</code>就会更新所有的options(选项)但是不会替换它们.
            </p>
          </div>
          </p>

          <h3 id="installation-localization">本地化</h3>
          <p>
              Parsley的内置验证器带有各种错误验证消息。默认情况下，它们都是使用英语，但由于国际Parsley社区太出众了，许多其他语言都可用。
          </p>
          <p>如果要加载不同的语言环境和它的消息, 可以在引入Parsley文件之后引入:
<pre><code>&lt;script src="jquery.js">&lt;/script>
&lt;script src="parsley.min.js">&lt;/script>
&lt;script src="i18n/fr.js">&lt;/script>
&lt;script src="i18n/it.js">&lt;/script>
</code></pre>
            最后加载的文件将为Parsley自动设置语言环境。在上面的例子中，我们加载了法语和意大利语，并使用意大利语。
            </li>
            </ul>
          </p>

          <h3 id="installation-plugins">插件</h3>
          <p>
              Parsley力求高度解耦和模块化。它使用事件和继承，并允许各种插件。
          </p>
            <p>当前可用的插件是<a href="#extras">额外</a>的验证器。</p>

          <!-- ****************** USAGE ****************** -->
          <h1 id="usage" class="page-header">用法</h1>
          <h3 id="usage-overview">概览</h3>
          <p>
              Parsley是一个分离的库，使用不同的类做繁重的工作。你会在这里看到不同的主角，以及如何配置他们，以满足您所需的验证。
          </p>
          <table class="table table-stripped table-bordered">
            <thead>
              <tr>
                <th class="col-md-3">$ API</th>
                <th class="col-md-1">Return</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>$('#existingForm').parsley(options)</code> <version>#2.0</version></td>
                <td><code>parsleyFormInstance</code></td>
              </tr>
              <tr>
                <td><code>$('#existingInput').parsley(options)</code> <version>#2.0</version></td>
                <td><code>parsleyFieldInstance</code></td>
              </tr>
              <tr>
                <td><code>$('#notExistingDOMElement').parsley(options)</code> <version>#2.0</version></td>
                <td><code>undefined</code></td>
              </tr>
              <tr>
                <td><code>$('.multipleElements').parsley(options)</code> <version>#2.0</version></td>
                <td><code>Array[Instances]</code></td>
              </tr>
            </tbody>
          </table>
          <div class="bs-callout bs-callout-warning">
            <h4>查看源码!</h4>
            <p>
                当然，本文档试图尽可能详尽和相对容易理解。本文档还提供完整的带有注释的<a href="annotated-source/main.html">源码</a>。请你花5分钟看一眼，至少了解它的结构（Parsley、parsleyform，parsleyfield，parsleyvalidator，parsleyui，utils，Pub/Sub...），它会大大降低后面内容的理解难度。
            </p>
          </div>

          <h3 id="usage-configuration">配置</h3>
          <h4>data属性和javascript</h4>
          <p>
              可以使用data属性和JavaScript指定多个选项
          </p>
<pre><code>&lt;input id="first" data-parsley-maxlength="42" value="hello"/&gt;
&lt;input id="second" value="world"/&gt;
[...]
&lt;script&gt;
var instance = $('#first').parsley();
console.log(instance.isValid()); // maxlength is 42, so field is valid
$('#first').attr('data-parsley-maxlength', 4);
console.log(instance.isValid()); // No longer valid, as maxlength is 4
// You can access and override options in javascript too:
instance.options.maxlength++;
console.log(instance.isValid()); // Back to being valid, as maxlength is 5
// Alternatively, the options can be specified as:
var otherInstance = $('#second').parsley({
  maxlength: 10
});
console.log(otherInstance.options); // Shows that maxlength will be 10 for this field
</code></pre>
          <p>
              如前一例所示，每当需要验证字段时，Parsley将实施data属性的选项。
          </p>
          <h4>Option配置继承</h4>
          <p>
            Field实例从Form实例继承options,他们都可以继承全局options. 这是一个方便的方式,来配置所有Form和inputs。
          </p>
<pre><code>&lt;form&gt;
  &lt;input/&gt;
&lt;/form&gt;
[...]
&lt;script&gt;
Parsley.options.maxlength = 42;
var formInstance = $('form').parsley();
var field = $('input').parsley();
console.log(field.options.maxlength); // Shows that maxlength is 42
Parsley.options.maxlength = 30;
console.log(field.options.maxlength); // Shows that maxlength is automagically 30
formInstance.options.maxlength++;
console.log(field.options.maxlength); // Shows that maxlength is automagically 31
</code></pre>
          <p>
              前面的例子表明，options继承是自动的。如果你有疑惑，可以理解为他们是通过原型联系起来，实现这一点。
          </p>

          <h4>命名</h4>
          <p>
              你可以直接使用<code>namespace</code>选项改变DOM API命名空间。复合名称的data属性遵从驼峰命名方式，它们的值会自动转换为适当的类型（布尔型，整型，等）。
            例如:
<pre><code>&lt;input data-my-namespace-priority-enabled="false"&gt;
[...]
&lt;script&gt;
var instance = $('input').parsley({namespace: 'my-namespace-'});
if (false === instance.options.priorityEnabled)
  console.log("priorityEnabled was set to false");
</code></pre>
          </p>

          <h3 id="usage-form">Form</h3>
          <p>
           在一个<code>&lt;form id="target"&gt;</code>元素上，使用<code>$('#target').parsley()</code>或<code>new Parsley('#target');</code>时, 它将绑定整个<code>form</code>和各种<code>input</code>,并返回一个<code>ParsleyForm</code>实例。
          </p>

          <h4>Options</h4>
          <table class="table table-stripped table-bordered">
            <thead>
              <tr>
                <th class="col-md-3">属性</th>
                <th class="col-md-1">默认值</th>
                <th class="col-md-4">描述</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>data-parsley-namespace</code> <version>#2.0</version></td>
                <td><code>data-parsley-</code></td>
                <td>命名空间，Parsley DOM API用来绑定options到form上。<br><a href="#data-attrs">See more</a></td>
              </tr>
              <tr>
                <td><code>data-parsley-validate</code> <version>#2.0</version></td>
                <td></td>
                  <td>当文档加载时，自动绑定Parsley验证器到您的form上</td>
              </tr>
              <tr>
                <td><code>data-parsley-priority-enabled</code> <version>#2.0</version></td>
                <td><code>true</code></td>
                  <td>首先验证更高优先级的约束,一旦有一个input验证失败就停止（<code>true</code>）;同时验证所有约束，并显示所有失败的元素（<code>false</code>）。</td>
              </tr>
              <tr>
                <td><code>data-parsley-inputs</code> <version>#2.0</version></td>
                <td>
                  <code>input,</code><br/>
                  <code>textarea,</code><br/>
                  <code>select</code></td>
                <td>选择哪些元素将被验证</td>
              </tr>
              <tr>
                <td><code>data-parsley-excluded</code> <version>#2.0</version></td>
                <td>
                  <code>input[type=button],</code><br/>
                  <code>input[type=submit],</code><br/>
                  <code>input[type=reset],</code><br/>
                  <code>input[type=hidden]</code></td>
                <td>选择不会被验证的元素</td>
              </tr>
            </tbody>
          </table>

          <h4>方法</h4>
          <table class="table table-stripped table-bordered">
            <thead>
              <tr>
                <th class="col-md-2">方法</th>
                <th class="col-md-1">返回值</th>
                <th class="col-md-5">描述</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>whenValid({group, force})</code> <version>#2.2</version></td>
                <td><code>promise</code></td>
                <td>返回一个jQuery promise，如果Form是合法的，将会执行验证。<strong>不会影响UI，也不会触发<a href="#events">事件</a>.</strong> 如果设置了<code>group</code>, 只会验证属于这个<code>group</code>的field. 如何设置了<code>force</code>, 不管field是否需要验证，它都会强制验证。(<a href="examples/events.html">See example</a>)</td>
              </tr>
              <tr>
                <td><code>isValid({group, force})</code> <version>#2.0</version></td>
                <td><code>boolean or null</code></td>
                  <td>类似于<code>whenValidate</code>，但是它会返回<code>true</code>如果验证通过, <code>false</code>如果验证失败, and <code>null</code>如果验证未完成.</td>
              </tr>
              <tr>
                <td><code>whenValidate({group, force})</code> <version>#2.0</version></td>
                <td>
                  <code>promise</code>
                </td>
                <td>验证form. 如果验证不通过，阻止提交表单. <strong>触发<a href="#events">事件</a>并影响UI.</strong>. 您只能通过指定可选的<code>group</code>字符串参数来验证某一<code>group</code>字段..如果设置了<code>group</code> is given,它只会验证属于这个<code>group</code>的field. 如何设置了<code>force</code>,不管fields是否需要验证，它都会强制验证。(<a href="examples/events.html">See example</a>).</td>
              </tr>
              <tr>
                <td><code>validate({group, force})</code> <version>#2.0</version></td>
                <td>
                  <code>boolean or null</code>
                </td>
                <td>等同于<code>whenValidate</code>，但是它会返回<code>true</code>如果验证通过, <code>false</code>如果验证失败, and <code>null</code>如果验证未完成.</td>
              </tr>
              <tr>
                <td><code>reset()</code> <version>#2.0</version></td>
                <td></td>
                <td>重置form和field 的 UI</td>
              </tr>
              <tr>
                <td><code>destroy()</code> <version>#2.0</version></td>
                <td></td>
                <td>禁用和摧毁form和field 的Parsley</td>
              </tr>
            </tbody>
          </table>

          <h4>UI</h4>
          See <a href="#ui-for-form">UI for Form</a> section.


          <h3 id="usage-field">Field</h3>
          <p>
              在一个<code>&lt;input id="target"&gt;</code>元素上，使用<code>$('#target').parsley()</code>或<code>new Parsley('#target')</code>时, 它将绑定那个field,并返回一个ParsleyField实例。
              除了单选框和复选框，其他没有<code>name</code>属性或<code>data-parsley-multiple</code>属性的，它们不会绑定（忽略），并且最终将在控制台的出现警告。
          </p>

          <h4>选项</h4>
          <table class="table table-stripped table-bordered">
            <thead>
              <tr>
                <th class="col-md-3">属性</th>
                <th class="col-md-5">描述</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>data-parsley-value</code> <version>#2.0</version></td>
                <td>为Parsley验证器设置一个特定的值,和真实的值分离。eg: <code>data-parsley-value="foo"</code>
                  <br/>
                  JavaScript API允许你通过一个函数的调用来设置它。 eg:
                <code>
                  $('&lt;input type="text"&gt;').appendTo($('form')).<br/>
                  parsley({<br/>
                  &nbsp;&nbsp;value: function(parsley) { return 'foo'; }<br/>
                  });
                </code></td>
              </tr>
              <tr>
                <td><code>data-parsley-group</code> <version>#2.0</version></td>
                <td>给field分组，以便分组验证. eg: <code>data-parsley-group="signup"</code>. 这样，只能验证form的一部分，而不是所有field。可以设置多个值. eg: <code>data-parsley-group='["foo", "bar"]'</code></td>
              </tr>
              <tr>
                <td><code>data-parsley-multiple</code> <version>#2.0</version></td>
                <td>你可以把这个属性添加到 radio / checkboxes 元素上， 就像这样: <code>data-parsley-multiple="mymultiplelink"</code> 把他们连在一起，即使他们没有相同的名字。</td>
              </tr>
              <tr>
                <td><code>data-parsley-validate-if-empty</code> <version>#2.0</version></td>
                <td>默认情况下，如果field不是必需的,或空的,将不被验证.通过添加<code>data-parsley-validate-if-empty</code>, 验证将会执行即使field是空的.如果你需要一些自定义验证器，当field为空时，检查一些特定的东西，这个属性可以派上用场。</td>
              </tr>
              <tr>
                <td><code>data-parsley-whitespace</code> <version>#2.1</version></td>
                <td><br>使用: <code>data-parsley-whitespace="trim"</code>去除首尾的空格。<br>Use: <code>data-parsley-whitespace="squish"</code>压缩多个连续的空格字符为单个空格字符，并去除首尾的空格字符。</td>
              </tr>
              <tr>
                <td><code>data-parsley-ui-enabled</code> <version>#2.0</version></td>
                  <td>如果设置为<code>false</code>，Parsley将不会影响此field的UI。</td>
              </tr>
              <tr>
                <td><code>data-parsley-errors-messages-disabled</code> <version>#2.0</version></td>
                <td>在field上添加<code>parsley-success</code>和<code>parsley-error</code> classes ,但是没有错误消息.</td>
              </tr>
              <tr>
                <td><code>data-parsley-excluded</code> <version>#2.1</version></td>
                <td>如果设为<code>true</code>, 当绑定到一个form上时，Parsley 将会忽略这个field.</td>
              </tr>
              <tr>
                <td><code>data-parsley-debounce</code> <version>#2.3</version></td>
                <td>去抖。eg: <code>data-parsley-debounce="500"</code>.延迟500ms执行操作.</td>
              </tr>
            </tbody>
          </table>

          <div class="bs-callout bs-callout-warning">
            <h4>Checkbox, radio and select multiple</h4>
            <p>
             这些fields不同于<code>input</code>, <code>textarea</code>或单选<code>select</code>. 它，们需要一个<code>name</code>或者<code>id</code>属性来正确的绑定和验证. 否则, 它们将会被Parsley忽略名，并且在控制台抛出一个错误。
            </p>
          </div>

          <h4>方法</h4>
          <table class="table table-stripped table-bordered">
            <thead>
              <tr>
                <th class="col-md-2">方法</th>
                <th class="col-md-2">返回值</th>
                <th class="col-md-4">描述</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>isValid({force})</code> <version>#2.0</version></td>
                <td>
                  <code>true</code> if all ok<br/>
                  <code>null</code> if some validations are still pending<br/>
                  <code>[Violation, ...]]</code> if fails
                </td>
                <td>如果field无效或不存在，则返回. <strong>不会影响用户UI，也不会触发<a href="#events">事件</a>.</strong>如果设置了<code>force</code>,将会强制验证。(<a href="examples/events.html">See example</a>)</td>
              </tr>
              <tr>
                <td><code>validate({force, group})</code> <version>#2.0</version></td>
                <td>
                  <code>true</code> if all ok<br/>
                  <code>null</code> if some validations are still pending<br/>
                  <code>[Violation, ...]]</code> if fails
                </td>
                <td>验证Field. <strong>触发 <a href="#events">事件</a> and 影响UI.</strong> 如果设置了<code>force</code>,将会强制验证。(<a href="examples/events.html">See example</a>)</td>
              </tr>
              <td><code>getErrorsMessages()</code><version>#2.0</version></td>
                <td><code>array</code></td>
                <td>返回一个数组，包含验证后field的错误信息.</td>
              </tr>
              <tr>
                <td><code>reset()</code> <version>#2.0</version></td>
                <td></td>
                <td>重置当前field的UI.</td>
              </tr>
              <tr>
                <td><code>destroy()</code> <version>#2.0</version></td>
                <td></td>
                <td>禁止和摧毁当前field的Parsley</td>
              </tr>
            </tbody>
          </table>

          <h4>UI</h4>
          See <a href="#ui-for-field">UI for Field</a> section.

          <!-- ****************** BUILT-IN VALIDATORS ****************** -->
          <h1 id="validators" class="page-header">内置验证器</h1>
          <h3 id="validators-overview">概览</h3>
          <p>
            一个<i>validator</i>是一个方法，通过传递一些必要的参数，来确定给定的值(或值的集合)是否是合法。</p>
          <p>
            Parsley内置多种验证器，并且提供一些方法让你自己来定义它。
          </p>

          <h3 id="validators-list">内置验证器列表</h3>
          <table class="table table-stripped table-bordered">
            <thead>
              <tr>
                <th class="col-md-2">名称</th>
                <th class="col-md-4">API</th>
                <th class="col-md-5">描述</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>
                  <a name="psly-validator-required"></a>
                  Required <version>#2.0</version>
                </td>
                <td>
                  <table class="table-stripped hundred">
                    <tr>
                      <td><code>required</code></td>
                      <td><span class="label label-info pull-right">HTML5</span></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-required</code></td>
                      <td></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-required="true"</code></td>
                      <td></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-required="false"</code></td>
                      <td></td>
                    </tr>
                  </table>
                </td>
                  <td><code>true</code>表示必填项</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-email"></a>
                  Email <version>#2.0</version>
                </td>
                <td>
                  <table class="table-stripped hundred">
                    <tr>
                      <td><code>type="email"</code></td>
                      <td><span class="label label-info pull-right">HTML5</span></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-type="email"</code></td>
                      <td></td>
                    </tr>
                  </table>
                </td>
                <td>验证是否为邮箱地址</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-number"></a>
                  Number <version>#2.0</version>
                </td>
                <td><code>data-parsley-type="number"</code></td>
                <td>根据给定的<code>step</code>、<code>min</code>和oringal<code>value</code>验证值是否为有效的数字.
                  <br/>HTML5默认的<code>step</code>是"1", 这就和Parsley产生矛盾，Parsley 设置<code>data-parsley-type="number"</code>，默认的<code>step</code> 是"any".
                  <span class="label label-warning">Warning!</span> HTML5 <code>type="number"</code> 是反人类的，其默认的<code>step</code>为'1'就是鸡肋。此外，如果浏览器支持的话， 来自于js的有效值，在无效输入的情况下是<code>""</code>, 所以你永远不会得到一个错误（除非它也是<code>required</code>的）。</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-integer"></a>
                  Integer <version>#2.0</version>
                </td>
                <td>
                  <table class="table-stripped hundred">
                    <tr>
                      <td><code>type="number"</code></td>
                      <td><span class="label label-info pull-right">HTML5</span></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-type="integer"</code></td>
                      <td></td>
                    </tr>
                  </table>
                </td>
                <td>验证是否为整数</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-digits"></a>
                  Digits <version>#2.0</version>
                </td>
                <td><code>data-parsley-type="digits"</code></td>
                <td>验证一个值是否为数字。</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-alphanum"></a>
                  Alphanum <version>#2.0</version>
                </td>
                <td><code>data-parsley-type="alphanum"</code></td>
                <td>验证的值是一个有效的字母数字字符串。</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-url"></a>
                  Url <version>#2.0</version>
                </td>
                <td>
                  <table class="table-stripped hundred">
                    <tr>
                      <td><code>type="url"</code></td>
                      <td><span class="label label-info pull-right">HTML5</span></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-type="url"</code></td>
                      <td></td>
                    </tr>
                  </table>
                </td>
                <td>验证url</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-minlength"></a>
                  Minlength <version>#2.0</version>
                </td>
                <td><table class="table-stripped hundred">
                    <tr>
                      <td><code>minlength="6"</code></td>
                      <td><span class="label label-info pull-right">HTML5</span></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-minlength="6"</code></td>
                      <td></td>
                    </tr>
                  </table></td>
                <td>字符串最小长度</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-maxlength"></a>
                  Maxlength <version>#2.0</version>
                </td>
                <td><table class="table-stripped hundred">
                    <tr>
                      <td><code>maxlength="6"</code></td>
                      <td><span class="label label-info pull-right">HTML5</span></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-maxlength="6"</code></td>
                      <td></td>
                    </tr>
                  </table></td>
                <td>字符串最大长度</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-length"></a>
                  Length <version>#2.0</version>
                </td>
                <td><code>data-parsley-length="[6, 10]"</code></td>
                <td>长度范围</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-min"></a>
                  Min <version>#2.0</version>
                </td>
                <td>
                  <table class="table-stripped hundred">
                    <tr>
                      <td><code>min="6"</code></td>
                      <td><span class="label label-info pull-right">HTML5</span></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-min="6"</code></td>
                      <td></td>
                    </tr>
                  </table>
                </td>
                <td>最小值</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-max"></a>
                  Max <version>#2.0</version>
                </td>
                <td>
                  <table class="table-stripped hundred">
                    <tr>
                      <td><code>max="10"</code></td>
                      <td><span class="label label-info pull-right">HTML5</span></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-max="6"</code></td>
                      <td></td>
                    </tr>
                  </table>
                </td>
                <td>最大值</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-range"></a>
                  Range <version>#2.0</version>
                </td>
                <td>
                  <table class="table-stripped hundred">
                    <tr>
                      <td><code>type="range"</code></td>
                      <td><span class="label label-info pull-right">HTML5</span></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-range="[6, 10]"</code></td>
                      <td></td>
                    </tr>
                  </table>
                </td>
                <td>值的范围</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-pattern"></a>
                  Pattern <version>#2.0</version>
                </td>
                <td>
                  <table class="table-stripped hundred">
                    <tr>
                      <td><code>pattern="\d+"</code></td>
                      <td><span class="label label-info pull-right">HTML5</span></td>
                    </tr>
                    <tr>
                      <td><code>data-parsley-pattern="\d+"</code></td>
                      <td></td>
                    </tr>
                  </table>
                </td>
                <td>正则验证</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-mincheck"></a>
                  MinCheck <version>#2.0</version>
                </td>
                <td><code>data-parsley-mincheck="3"</code></td>
                <td>验证checkBox值的最小数量</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-maxcheck"></a>
                  MaxCheck <version>#2.0</version>
                </td>
                <td><code>data-parsley-maxcheck="3"</code></td>
                <td>验证checkBox值的最大数量</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-check"></a>
                  Check <version>#2.0</version>
                </td>
                <td><code>data-parsley-check="[1, 3]"</code></td>
                <td>验证checkBox值的个数范围</td>
              </tr>
              <tr>
                <td>
                  <a name="psly-validator-equalto"></a>
                  Equalto <version>#2.0</version>
                </td>
                <td><code>data-parsley-equalto="#anotherfield"</code></td>
                <td>验证值是否与另一字段的值相同（密码确认检查有用）。</td>
              </tr>
            </tbody>
          </table>

          <p>
           这些验证器被封装在<code>parsley.js</code>. 在<a href="#extras">Parsley Extras</a> 查看更多的验证器。
          </p>

          <h3 id="custom">自定义验证器</h3>
          <h3 id="custom-intro">定制你自己的</h3>
          <p>
              当然，Parsley内置验证器是常用的方法，你仍然需要一些更适合您的特定形式和验证。这就是为什么Parsley让您轻松地创建你自己的验证器。
          <p>
          <p>注册他们的首选方式(在<code>parsley.js</code> 加载之后)像这样:

<pre><code>&lt;input type="text" data-parsley-multiple-of="3" />
[...]
&lt;script type="text/javascript">
window.Parsley
  .addValidator('multipleOf', {
    requirementType: 'integer',
    validateNumber: function(value, requirement) {
      return 0 === value % requirement;
    },
    messages: {
      en: 'This value should be a multiple of %s',
      fr: 'Cette valeur doit être un multiple de %s'
    }
  });
&lt;/script>
</code></pre>
          </p>
          <p>下面的部分详细描述如何定义自定义验证器</p>
          <h3 id="custom-function">验证函数</h3>
          <p>有很多方法，验证器可以指定如何验证数据:
          <table class="table table-stripped table-bordered">
            <thead>
              <tr>
                <th class="col-md-1">Name</th>
                <th class="col-md-4">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>validateString</code></td>
                <td>以字符串传参</td>
              </tr>
              <tr>
                <td><code>validateNumber</code></td>
                <td>以数字传参</td>
              </tr>
              <tr>
                <td><code>validateMultiple</code></td>
                <td>当为复选框时，以数组传参</td>
              </tr>
            </tbody>
          </table>

          <p>您的自定义验证器必须至少指定其中一个. 如果它可以验证单选框和多选框（即复选框）, 你可以指定为<i>validateMultiple</i> 和另外两个。</p>

          <p>如果该值是有效的，验证函数应该返回<code>true</code>，否则，应该返回<code>false</code>. 他也可以返回一个jQuery promise，如果值是有效的，则解决，无效，则拒绝。</p>

          <p>如果需要的话，验证器可以注册一个自定义错误消息作为第一个参数。</p>

          <h3 id="custom-requirement">需要的参数</h3>

          <p>您可以指定需要什么样的参数:
          <table class="table table-stripped table-bordered">
            <thead>
              <tr>
                <th class="col-md-1"><code>requirementType</code></th>
                <th class="col-md-4">描述</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><code>'string'</code></td>
                <td>最通用的类；按要求传递的，没有检查。</td>
              </tr>
              <tr>
                <td><code>'integer'</code></td>
                <td>只为整数（例如，<code>minlength</code>）</td>
              </tr>
              <tr>
                <td><code>'number'</code></td>
                <td>当小数数字是可以接受的</td>
              </tr>
              <tr>
                <td><code>'regexp'</code></td>
                  <td>参数可以是完整的正则表达式的字符串（例如<code>/hel+o/i</code>）或只是一个简单的表达式（例如<code>hel+o</code>）</td>
              </tr>
              <tr>
                <td><code>'boolean'</code></td>
                  <td>除<code>"false"</code>以外的任何值都将被视为true，包括空字符串。</td>
              </tr>
            </tbody>
          </table>

          <p>您还可以指定参数的类型为一个数组。例如,如果一个验证器有 <code>requirementType: ['integer', 'integer']</code>, 然后给一个字符串参数 <code>"[1, 2]"</code>。 它将会把<code>1</code>和<code>2</code>最为第二和第三个参数(第一个参数是<code>"[1, 2]"</code>)来验证).
          </p>

            <p>如果需要更复杂的参数，可以指定额外的参数；参考源码和远程验证器使用。</p>
        </div>

          <h3 id="custom-messages">错误信息</h3>
          <p>您可以指定错误信息, 在一些需要的场所, 使用<code>messages</code>选项.</p>
          <p>这相当于调用<code>addMessage</code>为每一个错误。</p>

        <!-- ****************** UI/ UX ****************** -->
        <h1 id="ui" class="page-header">UI/UX</h1>
        <h3 id="ui-overview">概览</h3>
        <p>
        Parsley 封装了一个 UI/UX 组件，这是唯一一个负责更改页面的类、错误消息、焦点或触发器事件的组件。 它力求最友好的用户交互体验. 这是ParsleyUI的主要格言：:
        <ol>
          <li><strong>最小字符验证</strong>: 当输入框小于3个字符时，Parsley 默认情况下不进行验证。 不要用错误信息太早打扰到用户！!</li>
          <li><strong>一次只显示一个错误</strong>: Parsley验证是按优先级来的，如果其中的几个不满足验证的字段，只显示最重要的一个。</li>
          <li><strong>快速排除错误</strong>: 当一个field被验证为无效时, 进一步检查每次按键，一旦验证通过，快速消除错误消息。</li>
          <li><strong>快速聚焦到错误</strong>: 当form提交时,快速聚焦第一个错误的field，好让用户方便的修改错误.</li>
        </ol>
        </p>
          <p>当然，这一切都是完全可定制的；你将会看到如何配置所需的UX的行为。</p>

        <h3 id="ui-classes">Classes and templates</h3>
        <p>Parsley增加了它的类和元素的份额, 用轻松、优美的UI展示验证的结果。 默认情况下,它会根据验证结果添加<code>parsley-success</code> 和 <code>parsley-error</code> 类 , <strong>到一个简单的text, textarea and select input， radio / checkboxes元素的父级上</strong></p>

        <div class="bs-callout bs-callout-info">
          <h4>定制你的类</h4>
          <p>可以在配置中更改这些类的名称，也可以更改类元素。</p>
        </div>

        <h3 id="ui-for-form">UI for form</h3>
        <table class="table table-stripped table-bordered">
          <thead>
            <tr>
              <th class="col-md-3">名称</th>
              <th class="col-md-1">API</th>
              <th class="col-md-4">描述</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>UI Enabled <version>#2.0</version></td>
              <td><code>data-parsley-ui-enabled="false"</code></td>
              <td>激活或关闭UI</td>
            </tr>
            <tr>
              <td>Focus <version>#2.0</version></td>
              <td><code>data-parsley-focus="first"</code></td>
              <td>聚焦失败的field。可能的值：: <code>'first' | 'last' | 'none'<code></td>
            </tr>
          </tbody>
        </table>

        <h3 id="ui-for-field">UI for field</h3>
        <table class="table table-stripped table-bordered">
          <thead>
            <tr>
              <th class="col-md-3">名称</th>
              <th class="col-md-1">API</th>
              <th class="col-md-4">描述</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Trigger <version>#2.0</version></td>
              <td><code>data-parsley-trigger="input"</code></td>
              <td>指定一个或多个JavaScript触发验证的事件。若要设置多个事件，请将它们分隔为空格<code>data-parsley-trigger="focusin focusout"</code>.默认为 <code>null</code>. <a href="http://api.jquery.com/category/events/" target="_blank">查看jQuery支持的不同事件.</a></td>
            </tr>
            <tr>
              <td>Trigger After Failure<version>#2.0</version></td>
              <td><code>data-parsley-trigger-after-failure="focusout"</code></td>
              <td>第一次验证失败后，指定一个或多个JavaScript触发验证的事件。默认是 <a href="https://developer.mozilla.org/en-US/docs/Web/Events/input"><code>'input'</code></a>.</td>
            </tr>
            <td>No focus <version>#2.0</version></td>
              <td><code>data-parsley-no-focus</code></td>
              <td>当这个field验证失败后，不要聚焦(如果设置了<code>first</code>聚焦策略,下一个field将会被聚焦, 如果设置了<code>last</code>聚焦策略,上一个field将会被聚焦)</td>
            </tr>
            <tr>
              <td>Validation threshold <version>#2.0</version></td>
              <td><code>data-parsley-validation-threshold="10"</code></td>
              <td>与上面的触发器选项一起使用，对于所有按键事件，在field具有一定数量的字符之前，不要验证。默认值是<code>3</code></td>
            </tr>
            <tr>
              <td>Class handler <version>#2.0</version></td>
              <td><code>data-parsley-class-handler="#element"</code></td>
                <td>指定ParsleyUI添加错误和成功类的容器。它也可以用JavaScript回调函数配置，参考<a href="annotated-source/defaults.html">源码</a></td>
            </tr>
            <tr>
              <td>Errors container <version>#2.0</version></td>
              <td><code>data-parsley-errors-container="#element"</code></td>
              <td>指定ParsleyUI添加错误类的容器。<a href="annotated-source/defaults.html">源码</a>.</td>
            </tr>
            <tr>
              <td>Error message <version>#2.0</version></td>
              <td><code>data-parsley-error-message="my message"</code></td>
              <td>为field自定义一个唯一的全局消息。</td>
            </tr>
            <tr>
              <td>Validator error message <version>#2.0</version></td>
              <td><code>data-parsley-`constraint`-message="my message"</code></td>
              <td>为指定的约束自定义错误消息. eg: <code>data-parsley-required-message="this field is required"</code></td>
            </tr>
          </tbody>
        </table>

        <h3 id="ui-for-javascript">UI for javascript</h3>
        <p>
            Field实例具有低级别的方法来添加、更新和删除管理错误消息。你必须手动处理这些错误，他们应该独立于其他验证。更倾向于使用自定义验证。
        </p>
        <table class="table table-stripped table-bordered">
          <thead>
            <tr>
              <th class="col-md-3">名称</th>
              <th class="col-md-1">方法</th>
              <th class="col-md-4">描述</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Add error <version>#2.0</version></td>
              <td><code>addError(name, {message: , assert: , updateClass: true});</code></td>
              <td>添加错误信息。</td>
            </tr>
            <td>Update error <version>#2.0</version></td>
              <td><code>updateError(name, {message: , assert: , updateClass: true});</code></td>
              <td>更新已添加的错误消息。</td>
            </tr>
            <td>Remove error <version>#2.0</version></td>
              <td><code>removeError(name, {updateClass: true});</code></td>
              <td>删除一个已经存在的错误。</td>
            </tr>
          </tbody>
        </table>
        <!-- ****************** Events ****************** -->
        <h1 id="events" class="page-header">Events</h1>
        <h3 id="events-overview">概览</h3>
          <p>Parsley触发事件来让ParsleyUI起作用。此外，它可以让你做一些强大的魔术，如果你适当地监听正确的事件！</p>
        <p>出于性能原因，Parsley不使用jQuery事件，但监听事件的API是非常相似的：
<pre><code>$('#some-input').parsley().on('field:success', function() {
  // In here, `this` is the parlsey instance of #some-input
});
</code></pre>
        </p>
        <p>类似于jQuery事件，Parsley事件将会冒泡。 例如, 如果一个field即将被验证, 在field实例上， <code>'field:validate'</code>事件将会被第一个触发, 然后就是在form实例上触发(如果 field被绑定到form上) ，最后会冒泡到<code>window.Parsley</code>
<pre><code>window.Parsley.on('field:error', function() {
  // This global callback will be called for any field that fails validation.
  console.log('Validation failed for: ', this.$element);
});
</code></pre>
        </p>.
        <h3 id="events-list">事件列表</h3>
        <table class="table table-stripped table-bordered">
          <thead>
            <tr>
              <th class="col-md-2">名称</th>
              <th class="col-md-1">实例</th>
              <th class="col-md-1">被触发</th>
              <th class="col-md-4">描述</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td><code>form:init</code> <version>#2.1</version></td>
              <td><code>ParsleyForm</code></td>
              <td><code>new Parsley()</code></td>
              <td>当form第一次绑定时触发。</td>
            </tr>
            <tr>
              <td><code>form:validate</code> <version>#2.1</version></td>
              <td><code>ParsleyForm</code></td>
              <td><code>.validate()</code></td>
              <td>在form验证之前触发</td>
            </tr>
            <tr>
              <td><code>form:success</code> <version>#2.1</version></td>
              <td><code>ParsleyForm</code></td>
              <td><code>.validate()</code></td>
              <td>在form验证成功后触发</td>
            </tr>
            <tr>
              <td><code>form:error</code> <version>#2.1</version></td>
              <td><code>ParsleyForm</code></td>
              <td><code>.validate()</code></td>
              <td>在form验证失败后触发</td>
            </tr>
            <tr>
              <td><code>form:validated</code> <version>#2.1</version></td>
              <td><code>ParsleyForm</code></td>
              <td><code>.validate()</code></td>
              <td>在form验证完成后（成功或有错误）触发</td>
            </tr>
            <tr>
              <td><code>form:submit</code> <version>#2.2</version></td>
              <td><code>ParsleyForm</code></td>
              <td><code>submit()</code></td>
              <td>在表单验证成功后，在表单实际提交之前触发.。
                  返回<code>false</code>,来中止form的提交。</td>
            </tr>
            <tr>
              <td><code>field:init</code> <version>#2.1</version></td>
              <td><code>ParsleyField</code></td>
              <td><code>new Parsley()</code></td>
              <td>在第一次绑定filed时触发。</td>
            </tr>
            <tr>
              <td><code>field:validate</code> <version>#2.1</version></td>
              <td><code>ParsleyField</code></td>
              <td><code>.validate()</code></td>
                <td>在field验证之前触发</td>
            </tr>
            <tr>
              <td><code>field:success</code> <version>#2.1</version></td>
              <td><code>ParsleyField</code></td>
              <td><code>.validate()</code></td>
                <td>在field验证成功时触发</td>
            </tr>
            <tr>
              <td><code>field:error</code> <version>#2.1</version></td>
              <td><code>ParsleyField</code></td>
              <td><code>.validate()</code></td>
                <td>在field验证失败时触发</td>
            </tr>
            <tr>
              <td><code>field:validated</code> <version>#2.1</version></td>
              <td><code>ParsleyField</code></td>
              <td><code>.validate()</code></td>
                <td>在form验证完成后（成功或有错误）触发</td>
            </tr>
          </tbody>
        </table>

        <!-- ****************** Remote ****************** -->
        <h1 id="remote" class="page-header">Parsley 远程</h1>
        <p>
          Parsley <a href="annotated-source/remote.html" target="_blank">remote</a>是一个易于使用的AJAX异步验证器。</strong>
        </p>

        <h3>选项</h3>
        <table class="table table-stripped table-bordered">
          <thead>
            <tr>
              <th class="col-md-3">名称</th>
              <th class="col-md-1">API</th>
              <th class="col-md-4">描述</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Remote validator</td>
              <td><code>data-parsley-remote</code> <version>#2.0</version></td>
              <td>Define the url that will be called to validate the entered content. e.g. <code>data-parsley-remote="http://url.ext"</code>.
                <br/>If the url contains the string <code>"{value}"</code>, the value will replace it in the URL (typical of RESTful APIs),
                otherwise the value will be passed as a data parameter, with the key being the input's name or ID.</td>
            </tr>
            <tr>
              <td>Reverse</td>
              <td><code>data-parsley-remote-reverse</code> <version>#2.0</version></td>
              <td>By default, all 2xx ajax returs are considered valid, all others failure. Sometimes (when a call is needed to see if an email, a pseudo is available for example) a 404 API answer could be the right answer. Using <code>data-parsley-remote-reverse="true"</code> will consider 200 response is an error, and 404 one is correct.</td>
            </tr>
            <tr>
              <td>Options</td>
              <td><code>data-parsley-remote-options</code> <version>#2.0</version></td>
              <td>You could pass a json object to the <code>$.ajax()</code> method used by remote validator. eg: <pre>data-parsley-remote-options='{ "type": "POST", "dataType": "jsonp", "data": { "token": "value" } }'</pre>
              <span class="label label-warning">Warning:</span> you must format your JSON string wrapping all the keys/values with <code>"</code> like above otherwise it won't be correctly parsed by <code>$.parseJSON()</code> used behind the scenes by remote validator (<a href="https://api.jquery.com/jQuery.parseJSON/" target="_blank">See jQuery doc</a>)</td>
            </tr>
            <tr>
              <td>Validator</td>
              <td><code>data-parsley-remote-validator</code> <version>#2.0</version></td>
              <td><p>Use a specific remote validator. By default, there are 2 built-in remote validators: <code>default</code> and <code>reverse</code>. Default one is used by default and Reverse one used when <code>data-parsley-remote-reverse</code> is set to true. (this is an alias, you could use <code>data-parsley-remote-validator="reverse"</code>).</p>
                  <p>Inside the function, <code>this</code> keyword refers to the <code>ParsleyField</code> instance attached to the form element. You have access to the plugin as well as the element if you need to perform other actions before returning the validation result.</p>
                  <p>To learn how to craft your custom remote validators, go <a href="#remote-custom">here</a>.</p></td>
            </tr>
          </tbody>
        </table>

        <h3 id="remote-events">Events</h3>
        <table class="table table-stripped table-bordered">
          <thead>
            <tr>
              <th class="col-md-2">Name</th>
              <th class="col-md-1">Instance</th>
              <th class="col-md-1">Fired by</th>
              <th class="col-md-4">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td><code>field:ajaxoptions</code> <version>#2.2</version></td>
              <td><code>ParsleyField</code></td>
              <td><code>whenIsValid</code> &amp; al.</td>
              <td>Triggered just before an ajax request is sent, so one can tweak the options passed to <code>$.ajax</code>. Options are passed as a second parameter.</td>
            </tr>
          </tbody>
        </table>

        <h3 id="remote-methods">Methods</h3>
        <table class="table table-stripped table-bordered">
          <thead>
            <tr>
              <th class="col-md-1">Method</th>
              <th class="col-md-4">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td><code>Parsley.addAsyncValidator(name, fn)</code> <version>#2.0</version></td>
              <td>Specify custom validator for Ajax results.</td>
            </tr>
          </tbody>
        </table>

        <a name="remote-custom"></a>
        <h3>Custom remote validators</h3>
        <p>If you need some custom processing of Ajax responses, configure your custom remote as follows:
<pre><code>&lt;input name="q" type="text" data-parsley-remote data-parsley-remote-validator='mycustom' value="foo" />
[...]
&lt;script href="parsley.remote.js">&lt;/script>
&lt;script type="text/javascript">
window.Parsley.addAsyncValidator('mycustom', function (xhr) {
    console.log(this.$element); // jQuery Object[ input[name="q"] ]

    return 404 === xhr.status;
  }, 'http://mycustomapiurl.ext');
&lt;/script>
</code></pre>
            </li>
          </ul>
        </p>

        <!-- ****************** Extra ****************** -->
        <h1 id="extras" class="page-header">Parsley拓展</h1>
        <p>
          在<code>src/extra/</code> 目录下、在Parsley .zip 或 Github项目中，你会找到许多由社区贡献的，或多或少有用的验证.文档如下.
        </p>
        <h3 id="validators-list">Validators list</h3>
        <table class="table table-stripped table-bordered">
          <thead>
           <tr>
             <th class="col-md-2">Name</th>
             <th class="col-md-4">API</th>
             <th class="col-md-5">Description</th>
           </tr>
         </thead>
         <tbody>
           <tr>
             <td>
               <a name="psly-validator-gt"></a>
               Greater than <version>#2.0</version>
             </td>
             <td>
               <table class="table-stripped hundred">
                 <tr>
                   <td><code>data-parsley-gt="#anotherfield"</code></td>
                   <td></td>
                 </tr>
                 <tr>
                   <td><code>data-parsley-gt="6"</code></td>
                   <td></td>
                 </tr>
               </table>
             </td>
             <td>Validates that the value is greater than another field's value or some strict minimum number.</td>
           </tr>
           <tr>
             <td>
               <a name="psly-validator-gte"></a>
               Greater than or equal to <version>#2.0</version>
             </td>
             <td>
               <table class="table-stripped hundred">
                 <tr>
                   <td><code>data-parsley-gte="#anotherfield"</code></td>
                   <td></td>
                 </tr>
                 <tr>
                   <td><code>data-parsley-gte="6"</code></td>
                   <td></td>
                 </tr>
               </table>
             </td>
             <td>Validates that the value is greater than or equal to another field's value or some minimum number.</td>
           </tr>
           <tr>
             <td>
               <a name="psly-validator-lt"></a>
               Less than <version>#2.0</version>
             </td>
             <td>
               <table class="table-stripped hundred">
                 <tr>
                   <td><code>data-parsley-lt="#anotherfield"</code></td>
                   <td></td>
                 </tr>
                 <tr>
                   <td><code>data-parsley-lt="6"</code></td>
                   <td></td>
                 </tr>
               </table>
             </td>
             <td>Validates that the value is less than another field's value or some strict maximum number.</td>
           </tr>
           <tr>
             <td>
               <a name="psly-validator-lte"></a>
               Less than or equal to <version>#2.0</version>
             </td>
             <td>
               <table class="table-stripped hundred">
                 <tr>
                   <td><code>data-parsley-lte="#anotherfield"</code></td>
                   <td></td>
                 </tr>
                 <tr>
                   <td><code>data-parsley-lte="6"</code></td>
                   <td></td>
                 </tr>
               </table>
             </td>
             <td>Validates that the value is less than or equal to another field's value or some minimum number.</td>
           </tr>
           <tr>
             <td>
               <a name="psly-validator-minwords"></a>
               Minwords <version>#2.0</version>
             </td>
             <td>
               <table class="table-stripped hundred">
                 <tr>
                   <td><code>data-parsley-minwords="200"</code></td>
                   <td></td>
                 </tr>
               </table>
             </td>
             <td>Validates that the value have at least a certain amount of words</td>
           </tr>
           <tr>
             <td>
               <a name="psly-validator-maxwords"></a>
               Maxwords <version>#2.0</version>
             </td>
             <td>
               <table class="table-stripped hundred">
                 <tr>
                   <td><code>data-parsley-maxwords="200"</code></td>
                   <td></td>
                 </tr>
               </table>
             </td>
             <td>Validates that the value have a maximum of a certain amount of words</td>
           </tr>
           <tr>
             <td>
               <a name="psly-validator-words"></a>
               Words <version>#2.0</version>
             </td>
             <td>
               <table class="table-stripped hundred">
                 <tr>
                   <td><code>data-parsley-words="[200, 600]"</code></td>
                   <td></td>
                 </tr>
               </table>
             </td>
             <td>Validates that the value is within a certain range of words</td>
           </tr>
         </tbody>
        </table>
      </div>

      <div class="col-md-3">
        <div class="sidebar hidden-print affix-top" role="complementary">
          <ul class="nav sidenav">
              <li class="active">
                <a href="#overview">概览</a>
                <ul class="nav">
                  <li><a href="#frontend-form-validation">前端表单验证</a></li>
                  <li><a href="#data-attrs">Data属性</a></li>
                  <li><a href="#configuration">配置</a></li>
                </ul>
              </li>
              <li>
                <a href="#installation">安装</a>
                <ul class="nav">
                  <li><a href="#installation-basic">基本安装</a></li>
                  <li><a href="#installation-javascript">Javascript安装</a></li>
                  <li><a href="#installation-localization">本地化</a></li>
                  <li><a href="#installation-plugins">插件</a></li>
                </ul>
              </li>
              <li>
                <a href="#usage">用法</a>
                <ul class="nav">
                  <li><a href="#usage-overview">概览</a></li>
                  <li><a href="#usage-configuration">配置</a></li>
                  <li><a href="#usage-form">Form</a></li>
                  <li><a href="#usage-field">Field</a></li>
                </ul>
              </li>
              <li>
                <a href="#validators">内置验证器</a>
                <ul class="nav">
                  <li><a href="#validators-overview">概览</a></li>
                  <li><a href="#validators-list">内置验证器列表</a></li>
                </ul>
              </li>
              <li>
                <a href="#custom">自定义验证器</a>
                <ul class="nav">
                  <li><a href="#custom-intro">Craft yours!</a></li>
                  <li><a href="#custom-function">Validating functions</a></li>
                  <li><a href="#custom-requirement">Requirement parameters</a></li>
                  <li><a href="#custom-messages">Error messages</a></li>
                </ul>
              </li>
              <li>
                <a href="#ui">UI/UX</a>
                <ul class="nav">
                  <li><a href="#ui-overview">Overview</a></li>
                  <li><a href="#ui-classes">Class & templates</a></li>
                  <li><a href="#ui-for-form">UI for Form</a></li>
                  <li><a href="#ui-for-field">UI for Field</a></li>
                  <li><a href="#ui-for-javascript">UI for javascript</a></li>
                </ul>
              </li>
              <li>
                <a href="#events">事件</a>
                <ul class="nav">
                  <li><a href="#events-overview">Overview</a></li>
                  <li><a href="#events-list">List</a></li>
                </ul>
              </li>
              <li>
                <a href="#remote">Parsley 远程</a>
              </li>
              <li>
                <a href="#extras">Parsley 拓展</a>
              </li>
          </ul>
          <a class="back-to-top" href="#top">
              Back to top
          </a>


        </div>
      </div>
      <div class="clearfix"></div>

      <!-- Site footer -->
      <div class="footer">
        <p>&copy; <a href="https://twitter.com/guillaumepotier" title="Guillaume Potier on Twitter">Guillaume Potier</a> 2014 - <a href="http://wisembly.com">@Wisembly</a></p>
      </div>
    </div>

    <script type="text/javascript" src="../bower_components/jquery/dist/jquery.min.js"></script>
    <script type="text/javascript" src="../bower_components/bootstrap/js/affix.js"></script>
    <script type="text/javascript" src="../bower_components/bootstrap/js/scrollspy.js"></script>
    <!--<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/7.3/highlight.min.js"></script>-->
    <script type="text/javascript" src="assets/docs.js"></script>
    <script type="text/javascript" src="../dist/parsley.min.js"></script>

    <!--<script type="text/javascript">

      try {
        hljs.initHighlightingOnLoad();
      } catch ( err ) {}

      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-37229467-1']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    </script>-->

  </body>
</html>
